package org.frankkie.parcdroidprj;

import java.util.ArrayList;

public class OverlayLijn {

  public OverlayPunt punt1;
  public OverlayPunt punt2;
  public double afstandTotGPS;
  public double lengteLijn;
  ////DIJKSTRA
  ///public OverlayPunt target;
  //public final double weight;//daar hebben we lengteLijn al voor !

  //Dijkstra
//  public OverlayLijn(OverlayPunt argTarget, double argWeight) {
//    target = argTarget;
//    lengteLijn = argWeight;
//  }
  ////Einde Dijkstra

  public void resetVoorDijkstra(){
    this.punt1.addLijnToAdjacencies(this);
    this.punt2.addLijnToAdjacencies(this);
  }

  //@Deprecated
  //use
  //OverlayLijn(OverlayPunt p1, OverlauPunt p2)
  //instead
  //Reason: ArrayList-index is not reliable/always the same !
  //public OverlayLijn(int punt1, int punt2) {
  //  ArrayList<OverlayPunt> gpsPlekken = OverlayDinges.getGpsPlekken();
  //  this.punt1=gpsPlekken.get(punt1);
  //  this.punt2=gpsPlekken.get(punt2);
  // }
  public OverlayLijn(int punt1, int punt2) {
    ArrayList<OverlayPunt> gpsPlekken = OverlayDinges.getGpsPlekken();
    for (int a = 0; a < gpsPlekken.size(); a++) {
      if (gpsPlekken.get(a).getVolgnummer() == punt1) {
        this.punt1 = gpsPlekken.get(a);
      }
      if (gpsPlekken.get(a).getVolgnummer() == punt2) {
        this.punt2 = gpsPlekken.get(a);
      }
    }
    //Lengte invullen
    mijnPoint2D.distance(this.punt1.geoPoint.getLatitudeE6(), this.punt1.geoPoint.getLongitudeE6(),this.punt2.geoPoint.getLatitudeE6(), this.punt2.geoPoint.getLongitudeE6());
    //Invullen bij de 2 punten
    this.punt1.addLijnToAdjacencies(this);
    this.punt2.addLijnToAdjacencies(this);
  }

  @Override
  public boolean equals(Object o){
    if (o instanceof OverlayLijn){
      if (this.hashCode() == o.hashCode()){
        return true;
      }
    }
    return false;
  }

  @Override
  public int hashCode() {
    int hash = 3;
    hash = 37 * hash + (this.punt1 != null ? this.punt1.hashCode() : 0);
    hash = 37 * hash + (this.punt2 != null ? this.punt2.hashCode() : 0);
    hash = 37 * hash + (int) (Double.doubleToLongBits(this.lengteLijn) ^ (Double.doubleToLongBits(this.lengteLijn) >>> 32));
    return hash;
  }

  public OverlayLijn(OverlayPunt punt1, OverlayPunt punt2) {
    this.punt1 = punt1;
    this.punt2 = punt2;
    //Lengte invullen
    mijnPoint2D.distance(this.punt1.geoPoint.getLatitudeE6(), this.punt1.geoPoint.getLongitudeE6(),this.punt2.geoPoint.getLatitudeE6(), this.punt2.geoPoint.getLongitudeE6());
    //Invullen bij de 2 punten
    this.punt1.addLijnToAdjacencies(this);
    this.punt2.addLijnToAdjacencies(this);
  }

  /**
   * @return the punt1
   */
  public OverlayPunt getPunt1() {
    return punt1;
  }

  /**
   * @param punt1 the punt1 to set
   */
  public void setPunt1(OverlayPunt punt1) {
    this.punt1 = punt1;
  }

  /**
   * @return the punt2
   */
  public OverlayPunt getPunt2() {
    return punt2;
  }

  /**
   * @param punt2 the punt2 to set
   */
  public void setPunt2(OverlayPunt punt2) {
    this.punt2 = punt2;
  }

  /**
   * @return the afstandTotGPS
   */
  public double getAfstandTotGPS() {
    return afstandTotGPS;
  }

  /**
   * @param afstandTotGPS the afstandTotGPS to set
   */
  public void setAfstandTotGPS(double afstandTotGPS) {
    this.afstandTotGPS = afstandTotGPS;
  }

  /**
   * @return the lengteLijn
   */
  public double getLengteLijn() {
    return lengteLijn;
  }

  /**
   * @param lengteLijn the lengteLijn to set
   */
  public void setLengteLijn(double lengteLijn) {
    this.lengteLijn = lengteLijn;
  }
}
